#include <iostream>
#include <signal.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

using namespace std;

int main()
{
    pid_t id = fork();
    if (id == 0) // child
    {
        int cnt = 500;
        while (cnt)
        {
            cout << "i am child,pid: " << getpid() << " cnt: " << cnt << endl;
            cnt--;
            sleep(1);
        }
        exit(1);
    }
    // father
    int status = 0;
    pid_t rid=waitpid(id,&status,0);
    if(rid==id)
    {
       cout << "child quit info, rid: " << rid << " exit code: " << 
          ((status>>8)&0xFF) << " exit signal: " << (status&0x7F) <<
          " core dump: " << ((status>>7)&1) << endl; 
    }

    return 0;
}
// void myhander(int signal)
// {
//     cout << "process get signal: " << signal << endl;
// }

// int main()
// {
//     signal(SIGALRM,myhander);
//     int n=alarm(5);
//     while(true)
//     {
//         cout<<"hello signal,pid: "<<getpid()<<endl;
//         sleep(1);
//     }

// }
// int main()
// {
//     signal(11,myhander);
//     // int a=10;
//     // a/=0;
//     int *p=nullptr;
//     *p=10;

//     return 0;
// }

// int main()
// {

//     // signal(SIGABRT, myhander);
//     // int cnt = 5;
//     // while (true)
//     // {
//     //     cout << "hello signal,mypid: " << getpid() << endl;
//     //     cnt--;
//     //     if (cnt == 0) abort();
//     //     sleep(1);
//     // }
//     return 0;
// }
// int main()
// {
//     while(true)
//     {
//         cout<<"hello signal,pid: "<<getpid()<<endl;
//         sleep(1);
//     }
//     return 0;
// }
